#ifndef SERIALCONFIG_H
#define SERIALCONFIG_H

#include <QString>
#include <QSerialPort>

/**
 * @brief 串口配置数据模型
 * 
 * 用于存储和传递串口配置参数
 */
class SerialConfig
{
public:
    SerialConfig()
        : portName("/dev/ttymxc1")
        , baudRate(QSerialPort::Baud115200)
        , dataBits(QSerialPort::Data8)
        , stopBits(QSerialPort::OneStop)
        , parity(QSerialPort::NoParity)
        , flowControl(QSerialPort::NoFlowControl)
    {
    }

    // 串口配置参数
    QString portName;                       // 串口名称
    QSerialPort::BaudRate baudRate;         // 波特率
    QSerialPort::DataBits dataBits;         // 数据位
    QSerialPort::StopBits stopBits;         // 停止位
    QSerialPort::Parity parity;             // 校验位
    QSerialPort::FlowControl flowControl;   // 流控制

    // 显示选项
    bool hexDisplay = false;                // 十六进制显示
    bool autoWrap = true;                   // 自动换行
    bool showTimestamp = true;              // 显示时间戳

    // 发送选项
    bool hexSend = false;                   // 十六进制发送
    bool addNewline = false;                // 自动添加换行
    bool autoSend = false;                  // 自动发送
    int autoSendInterval = 1000;            // 自动发送间隔(ms)

    /**
     * @brief 从波特率整数转换为枚举
     */
    static QSerialPort::BaudRate toBaudRate(int rate)
    {
        switch (rate) {
            case 1200: return QSerialPort::Baud1200;
            case 2400: return QSerialPort::Baud2400;
            case 4800: return QSerialPort::Baud4800;
            case 9600: return QSerialPort::Baud9600;
            case 19200: return QSerialPort::Baud19200;
            case 38400: return QSerialPort::Baud38400;
            case 57600: return QSerialPort::Baud57600;
            case 115200: return QSerialPort::Baud115200;
            default: return QSerialPort::Baud115200;
        }
    }

    /**
     * @brief 从枚举转换为波特率整数
     */
    static int fromBaudRate(QSerialPort::BaudRate rate)
    {
        return static_cast<int>(rate);
    }
};

#endif // SERIALCONFIG_H

